//package cn.nfwx.tv.widget;
//
//import android.content.Context;
//import android.graphics.drawable.Drawable;
//import android.support.annotation.Nullable;
//import android.util.AttributeSet;
//import android.view.LayoutInflater;
//import android.view.MotionEvent;
//import android.widget.ImageView;
//import android.widget.LinearLayout;
//import android.widget.SeekBar;
//import android.widget.TextView;
//
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.Date;
//import java.util.List;
//
//import cn.nfwx.tv.R;
//import cn.nfwx.tv.controller.PlayerViewController;
//import cn.nfwx.tv.helper.ThreadHelper;
//import cn.nfwx.tv.model.TVProgramModel;
//import cn.nfwx.tv.util.LogUtil;
//import cn.nfwx.tv.util.TimeUtil;
//import cn.nfwx.tv.widget.seekbar.Point;
//import cn.nfwx.tv.widget.seekbar.PointSeekBar;
//import p2pproxy.FileTimeInfo;
//import p2psvideo.P2PSPlayer;
//
///**
// * 进度控制器
// * Created by zhouzechao on 2017/11/18.
// */
//
//public class LiveControllerView extends LinearLayout implements P2PSPlayer.IController {
//
//    private final String TAG = LiveControllerView.class.getSimpleName();
//
//    ImageView iv_player_btn;
//    TextView tv_player_time, tv_player_maxtime, btn_tvprogram;
//    PointSeekBar sb_player;
//
//    P2PSPlayer _player;
//
//    private SimpleDateFormat _sf;
//
//    private boolean _isSeekEnable = false; // 是否支持时间移动
//    private boolean _isLive = false; // 是否是直播
//    private boolean _seeking = false; // 正在滑动中
//
//    private double seekLocationTime;
//    private long seekLength; //滑动距离
//    private double seekTime; // 直播移时
//    private int seekPosition; // 点播移时
//
//    private LiveControllerListener liveControllerListener;
//    private List<TVProgramModel> mTodayPrograms = new ArrayList<>();
//    private boolean _hasProgramload;
//
//    // 剪切恢复操作
//    private double clipTimeCode;
//
//    public LiveControllerView(Context context) {
//        this(context, null);
//    }
//
//    public LiveControllerView(Context context, @Nullable AttributeSet attrs) {
//        this(context, attrs, 0);
//    }
//
//    public LiveControllerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
//        super(context, attrs, defStyleAttr);
//
//        init();
//    }
//
//    private void init() {
//        if (_sf == null) {
//            _sf = new SimpleDateFormat("HH:mm:ss");
//        }
//
//        LayoutInflater.from(getContext()).inflate(R.layout.layout_player_controller, this, true);
//        iv_player_btn = findViewById(R.id.iv_player_btn);
//        tv_player_time = findViewById(R.id.tv_player_time);
//        tv_player_maxtime = findViewById(R.id.tv_player_maxtime);
//        sb_player = findViewById(R.id.sb_player);
//        btn_tvprogram = findViewById(R.id.btn_tvprogram);
//        sb_player.setClickable(false);
//        sb_player.setPointSeekBarListener(new PointSeekBar.PointSeekBarListener() {
//            @Override
//            public void seekToPoint(Point point) {
//                _seeking = false;
//                // 返回到对应的时间轴
//                _player.setOnSeekCompleteListener(PlayerViewController.getInstance());
//                if (_isLive) {
//                    _player.seekByTimeCode(point.getTime() * 1000D, true, true, true);
//                    sb_player.setProgress(point.getPosition());
//                    seekTime = point.getTime();
//                }
//            }
//        });
//
//        sb_player.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//            @Override
//            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//                //LogUtil.e(TAG, progress + "--" + fromUser);
//                if (!fromUser) { // 是否人为操作
//                    return;
//                }
//                sb_player.hideBubble();
//                if (_seeking) {
//                    if (_isLive) { // 是否是直播
//                        double current = seekLength * 1D - (((progress * seekLength) * 1D) / 100D);
//                        seekTime = seekLocationTime - current;
//                        tv_player_time.setText(_sf.format(new Date((long) (seekTime * 1000L))));
//                    } else {
//                        seekPosition = progress;
//                        tv_player_time.setText(TimeUtil.toTime(progress));
//                    }
//                }
//            }
//
//            @Override
//            public void onStartTrackingTouch(SeekBar seekBar) {
//                if (liveControllerListener != null) {
//                    liveControllerListener.onStartTrackingTouch();
//                }
//                if (_isLive) {
//                    if (seekBar.getProgress() == seekBar.getMax()) {
//                        seekLocationTime = _player.getTimeCode() * 1D / 1000D;
//                    } else {
//                        FileTimeInfo fileTimeInfo = _player.getFileTimeInfo(0);
//                        if (fileTimeInfo != null) {
//                            seekLocationTime = fileTimeInfo.latestTimeCode / 1000D;
//                        } else { // 计算出时间
//                            double timeCode = _player.getTimeCode() / 1000D;
//                            double seekLength1 = seekLength * 1F * seekBar.getProgress() / seekBar.getMax();
//                            double seekLength2 = seekLength - seekLength1;
//                            seekLocationTime = seekLength2 + timeCode;
//                        }
//                    }
//                }
//                _seeking = true;
//            }
//
//            @Override
//            public void onStopTrackingTouch(SeekBar seekBar) {
//                //LogUtil.e("ttt", seekBar.getProgress() + "----" + seekBar.getThumb().getBounds().right + "---" + seekBar.getWidth());
//                if (liveControllerListener != null) {
//                    liveControllerListener.onStopTrackingTouch();
//                }
//                _seeking = false;
//                // 返回到对应的时间轴
//                _player.setOnSeekCompleteListener(PlayerViewController.getInstance());
//                if (_isLive) {
//                    if (seekBar.getProgress() == seekBar.getMax()) { // 当100时，滚动到最前
//                        FileTimeInfo fileTimeInfo = _player.getFileTimeInfo(0);
//                        if (fileTimeInfo != null) {
//                            _player.seekByTimeCode(fileTimeInfo.latestTimeCode, true, true, true);
//                        } else {
//                            PlayerViewController.getInstance().playStop();
//                            PlayerViewController.getInstance().playResume();
//                        }
//                    } else { // 当其他时，滚动对应位置
//                        _player.seekByTimeCode(seekTime * 1000D, true, true, true);
//                    }
//                } else {
//                    _player.seekToKeyFrame(seekPosition);
//                }
//                iv_player_btn.setSelected(false);
//                rankBarThumbHidden();
//                PlayerViewController.getInstance().seek();
//            }
//        });
//    }
//
//
//    @Override
//    public void attachPlayer(P2PSPlayer player) {
//        _player = player;
//    }
//
//    @Override
//    public void detachPlayer() {
//        _player = null;
//    }
//
//    @Override
//    public void showController() {
//    }
//
//    @Override
//    public void hideController() {
//    }
//
//    @Override
//    public void statusChanged() {
//
//    }
//
//    @Override
//    public void updatePosition(int position, int duration) {
//        //LogUtil.e(TAG, position + "--" + duration);
//        if (_seeking) {
//            return;
//        }
//        //LogUtil.e(TAG, _player.duration() + "----" + _player.currentPosition() + "----" + _player.getTimeCode());
//        if (_isLive) {
//            double t = _player.getTimeCode();
//            if (t > 0) {
//                tv_player_time.setText(_sf.format(new Date((long) t)));
//                refreshSeekBar();
//                loadProgramSeek();
//            } else {
//                tv_player_time.setText("00:00:00");
//            }
//        } else {
//            if (_player.duration() <= _player.currentPosition()) {
//                tv_player_time.setText(TimeUtil.toTime(0));
//                sb_player.setProgress(0);
//                sb_player.setMax(_player.duration());
//                iv_player_btn.setSelected(true);
//                PlayerViewController.getInstance().playStop();
//                if (liveControllerListener != null) {
//                    liveControllerListener.playEnd();
//                }
//                return;
//            }
//            double t = _player.duration() / 1000L;
//            if (t > 0) {
//                tv_player_maxtime.setText(TimeUtil.toTime(_player.duration()));
//                tv_player_time.setText(TimeUtil.toTime(_player.currentPosition()));
//                sb_player.setMax(_player.duration());
//                sb_player.setProgress(_player.currentPosition());
//                refreshSeekBar();
//            } else {
//                tv_player_maxtime.setText("00:00:00");
//                tv_player_time.setText("00:00:00");
//            }
//        }
//    }
//
//    @Override
//    public void playSourceChanged() {
//
//    }
//
//    public void setOnPlayerClickListener(OnClickListener onclick) {
//        btn_tvprogram.setOnClickListener(onclick);
//        iv_player_btn.setOnClickListener(onclick);
//    }
//
//    /**
//     * 是否是直播
//     *
//     * @param live
//     */
//    public void setLiving(boolean live) {
//        sb_player.setClickable(false);
//        _isLive = live;
//        if (_isLive) {
//            tv_player_maxtime.setVisibility(GONE);
//            btn_tvprogram.setText("回看");
//            sb_player.setMax(100);
//            sb_player.setProgress(100);
//        } else {
//            tv_player_maxtime.setVisibility(VISIBLE);
//            btn_tvprogram.setText("列表");
//            sb_player.setMax(_player.duration());
//            sb_player.setProgress(_player.currentPosition());
//        }
//    }
//
//    /**
//     * 显示列表
//     */
//    public void showProgramView() {
//        btn_tvprogram.setVisibility(VISIBLE);
//    }
//
//    /**
//     * 隐藏列表
//     */
//    public void hiddenProgramView() {
//        btn_tvprogram.setVisibility(GONE);
//    }
//
//    /**
//     * 设置可以滑动的距离
//     *
//     * @param length
//     */
//    public void setSeekLength(long length) {
//        seekLength = length * 5;
//    }
//
//    /**
//     * 是否支持时间移动
//     *
//     * @param seekEnable
//     */
//    public void setSeekEnable(boolean seekEnable) {
//        _isSeekEnable = seekEnable;
//        rankBarThumbHidden();
//    }
//
//    private void refreshSeekBar() {
//        if (_isSeekEnable) {
//            rankBarThumbVisable();
//        } else {
//            if (_isLive) {
//                rankBarThumbHidden();
//            } else {
//                rankBarThumbVisable();
//            }
//        }
//    }
//
//    private void rankBarThumbHidden() {
//        Drawable dr = getResources().getDrawable(R.drawable.bg_r2_00ff);
//        sb_player.setThumb(dr);
//        sb_player.setEnabled(false);
//    }
//
//    private void rankBarThumbVisable() {
//        Drawable dr = getResources().getDrawable(R.mipmap.player_point_nor);
//        sb_player.setThumb(dr);
//        sb_player.setEnabled(true);
//    }
//
//    @Override
//    public boolean onTouchEvent(MotionEvent event) {
//        if (event.getAction() == MotionEvent.ACTION_DOWN) {
//            if (liveControllerListener != null) {
//                liveControllerListener.onStartTrackingTouch();
//            }
//        } else if (event.getAction() == MotionEvent.ACTION_UP) {
//            if (liveControllerListener != null) {
//                liveControllerListener.onStopTrackingTouch();
//            }
//        }
//        return super.onTouchEvent(event);
//    }
//
//    public void setLiveControllerListener(LiveControllerListener liveControllerListener) {
//        this.liveControllerListener = liveControllerListener;
//    }
//
//    /**
//     * 设置节目信息
//     *
//     * @param todayPrograms
//     */
//    public void setProgramSeek(List<TVProgramModel> todayPrograms) {
//        if (todayPrograms == null) {
//            return;
//        }
//        mTodayPrograms.clear();
//        mTodayPrograms.addAll(todayPrograms);
//        _hasProgramload = false;
//    }
//
//    /**
//     * 清除频道信息
//     */
//    public void clearProgramSeek() {
//        if (sb_player != null) {
//            sb_player.clearData();
//            hiddenBubble();
//        }
//    }
//
//    /**
//     * 清除气泡
//     */
//    public void hiddenBubble() {
//        if (sb_player != null) {
//            sb_player.hideBubble();
//        }
//    }
//
//    /**
//     * 刷新一次
//     */
//    public void refreshProgramSeek() {
//        _hasProgramload = false;
//        loadProgramSeek();
//    }
//
//    /**
//     * 设置节目信息
//     */
//    public void loadProgramSeek() {
//        if (mTodayPrograms == null || mTodayPrograms.isEmpty() || _player == null
//                || _player.getTimeCode() <= 0 || _hasProgramload || !_isLive) {
//            return;
//        }
//
//        clearProgramSeek();
//        FileTimeInfo fileTimeInfo = _player.getFileTimeInfo(0);
//        long timecode = 0;
//        if (fileTimeInfo != null) {
//            timecode = (long) (fileTimeInfo.latestTimeCode / 1000L);
//        } else { // 计算出时间
//            long timeCode = (long) (_player.getTimeCode() / 1000L);
//            double seekLength1 = seekLength * 1F * sb_player.getProgress() / sb_player.getMax();
//            double seekLength2 = seekLength - seekLength1;
//            timecode = (long) (seekLength2 + timeCode);
//        }
//        long pretimecode = timecode - seekLength;
//        ArrayList<Point> points = new ArrayList<>();
//        for (TVProgramModel tvProgramModel : mTodayPrograms) {
//            long time = tvProgramModel.getTime();
//            int position = (int) ((time - pretimecode) * 100D / seekLength);
//            if (time <= timecode && time >= pretimecode) {
//                points.add(new Point(position, time, tvProgramModel.getTitle()));
//            }
//        }
//        _hasProgramload = true;
//        sb_player.setPoints(points);
//    }
//
//    /**
//     * 暂停按钮
//     */
//    public void stopView() {
//        iv_player_btn.setSelected(true);
//    }
//
//    /**
//     * 播放按钮
//     */
//    public void playView() {
//        iv_player_btn.setSelected(false);
//    }
//
//    /**
//     * 剪切暂停记录对应的位置
//     */
//    public void clipPause() {
//        if (_player != null) {
//            clipTimeCode = _player.getTimeCode();
//            _player.clearScreen();
//        } else {
//            clipTimeCode = -1;
//        }
//        PlayerViewController.getInstance().playPause();
//        hiddenBubble();
//    }
//
//    /**
//     * 剪切恢复对应的位置
//     */
//    public void clipResume() {
//        if (sb_player.getMax() == sb_player.getProgress()) {
//            PlayerViewController.getInstance().playStop();
//            PlayerViewController.getInstance().playResume();
//        } else {
//            if (_player != null) {
//                if (clipTimeCode == -1) {
//                    PlayerViewController.getInstance().playStop();
//                    PlayerViewController.getInstance().playResume();
//                } else {
//                    _player.clearScreen();
//                    _player.setOnSeekCompleteListener(PlayerViewController.getInstance());
//                    _player.seekByTimeCode(clipTimeCode, true, true, true);
//                    PlayerViewController.getInstance().seek();
//                }
//            }
//        }
//    }
//
//    /**
//     * 播放
//     */
//    public void resume() {
//        playView();
//        PlayerViewController.getInstance().playResume();
//    }
//
//    /**
//     * 暂停
//     */
//    public void pause() {
//        stopView();
//        PlayerViewController.getInstance().playPause();
//    }
//
//    /**
//     * 停止
//     */
//    public void stop() {
//        stopView();
//        PlayerViewController.getInstance().playStop();
//    }
//
//
//    /**
//     * 监听
//     */
//    public interface LiveControllerListener {
//        void onStartTrackingTouch();
//
//        void onStopTrackingTouch();
//
//        void playEnd();
//    }
//}
